package com.file.system.entity.system;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.file.system.entity.basic.WebBasic;
import com.file.system.plugin.dict.Dict;
import com.file.system.plugin.validated.SQLInjectionValidation;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.*;
import javax.validation.groups.Default;
import java.io.Serializable;


/**
 * 账号
 *
 * @author jch
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@JsonIgnoreProperties(value = {"password"})
public class WebUser extends WebBasic implements Serializable {

    private static final long serialVersionUID = 1L;


    //新增
    public interface add extends Default {
    }

    //修改
    public interface update extends Default {
    }

    //修改密码
    public interface password extends Default {
    }

    //重置密码
    public interface reset extends Default {
    }


    /**
     * id
     *
     * @mock
     */
    @NotNull(groups = {reset.class, update.class}, message = "id不能为空")
    @Min(value = 1, message = "id长度最小1")
    private Long id;
    /**
     * 姓名
     *
     * @mock
     */
    @NotEmpty(groups = {update.class, add.class}, message = "姓名不能为空")
    @Size(min = 1, max = 100, message = "姓名长度1-100")
    @SQLInjectionValidation(fieldName = "姓名")
    private String name;
    /**
     * 用户名
     *
     * @mock
     */
    @NotEmpty(groups = {update.class, add.class}, message = "用户名不能为空")
    @Size(min = 1, max = 100, message = "用户名长度1-100")
    @SQLInjectionValidation(fieldName = "用户名")
    private String username;
    /**
     * 电话
     *
     * @mock
     */
    @NotEmpty(groups = {update.class, add.class}, message = "电话不能为空")
    @Size(min = 1, max = 30, message = "电话长度1-30")
    @SQLInjectionValidation(fieldName = "电话")
    private String phone;
    /**
     * 邮箱
     *
     * @mock
     */
    @NotEmpty(groups = {update.class, add.class}, message = "邮箱不能为空")
    @Size(groups = {update.class, add.class}, min = 1, max = 30, message = "邮箱长度1-30")
    @Email(message = "邮箱格式错误")
    @SQLInjectionValidation(fieldName = "邮箱")
    private String email;
    /**
     * 密码
     *
     * @mock
     */
    private String password;
    /**
     * 0启用1禁用
     *
     * @mock
     */
    @Dict("onOff")
    @NotEmpty(groups = {update.class, add.class}, message = "0启用1禁用不能为空")
    @Size(max = 1, message = "0启用1禁用长度1-1")
    @SQLInjectionValidation(fieldName = "启用禁用")
    private String dictOnOff;
    /**
     * 最后登录时间
     *
     * @mock
     */
    @Size(min = 1, max = 19, message = "最后登录时间长度1-19")
    private String lastLoginTime;
    /**
     * 是否为超级管理员
     *
     * @mock
     */
    private String isSuperAdmin;
    /**
     * 旧密码（修改密码时使用）
     *
     * @mock
     */
    @NotEmpty(groups = {password.class}, message = "旧密码不能为空")
    @Size(min = 1, max = 32, message = "旧密码长度1-32")
    @SQLInjectionValidation(fieldName = "旧密码")
    private String oldPassword;
    /**
     * 新密码（修改密码时使用）
     *
     * @mock
     */
    @NotEmpty(groups = {password.class}, message = "新密码不能为空")
    @Size(min = 1, max = 32, message = "新密码长度1-32")
    @SQLInjectionValidation(fieldName = "新密码")
    private String newPassword;
    /**
     * 部门id（查询使用）
     *
     * @mock
     */
    @Min(value = 1, message = "id长度最小1")
    private Long fkDepartmentId;
    /**
     * 备注
     *
     * @ignore
     * @mock 备注
     */
    @SQLInjectionValidation(fieldName = "备注")
    private String description;
    /**
     * ip（查询在线用户使用）
     */
    private String ip;
    /**
     * 最后操作时间（查询在线用户使用）
     */
    private String lastAccessTime;
    /**
     * 用户所属部门
     */
    private String department;
    /**
     * 角色id（查询使用）
     */
    private String fkRoleId;
    /**
     * 部门名称
     */
    private String departmentName;
}
